
package javaes.visao.cliente;

import java.util.ArrayList;
import java.util.List;
import javaes.controlador.ClienteRN;
import javaes.controlador.EnderecoRN;
import javaes.controlador.IClienteRN;
import javaes.controlador.IEnderecoRN;
import javaes.controlador.IPaisRN;
import javaes.controlador.IUFRN;
import javaes.controlador.PaisRN;
import javaes.controlador.UFRN;
import javaes.modelo.Cliente;
import javaes.modelo.Endereco;
import javaes.modelo.Pais;
import javaes.modelo.UF;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;

/**
 *
 * @author http://javaes.wordpress.com
 */
@ManagedBean
@SessionScoped
public class ClienteBean 
{
    private Cliente cliente             = new Cliente();
    private List<Cliente> clientes = null;
    private List<Pais> paises;
    private List<UF> ufs;
    private Endereco endereco           = new Endereco();
    private Pais pais                   = new Pais();
    private UF uf                       = new UF();
    private HtmlSelectOneMenu comboPais;  
    public ClienteBean() 
    {
       // this.clientes = new ArrayList();
    }

    public String novo()
    {
        this.cliente = new Cliente();
        return "/cadastro/cliente";
    }

    public String salvar()
    {
        FacesContext context = FacesContext.getCurrentInstance();
        IClienteRN clienteRN = new ClienteRN();
        IEnderecoRN enderecoRN = new EnderecoRN();
        try 
        {
            //Salva Endereço
            endereco.setUf(uf);
           // endereco.setPais(pais);
            enderecoRN.salvar(endereco);
            //Salva Cliente
            cliente.setEnderecoEntrega(endereco);
            clienteRN.salvar(cliente);
            FacesMessage facesMessage = new FacesMessage("Cliente inserido com sucesso!.");
            context.addMessage(null, facesMessage);
        } 
        catch (Exception ex) 
        {
            FacesMessage facesMessage = new FacesMessage("Erro ao Salvar.");
            context.addMessage(null, facesMessage);
        }
        return "/cadastro/cliente";
    }

    public String excluir()
    {
        FacesContext context            = FacesContext.getCurrentInstance();
        IClienteRN clienteRN            = new ClienteRN();
        try 
            {
            clienteRN.excluir(cliente);
            FacesMessage facesMessage = new FacesMessage("Cliente excluido com sucesso!.");
            context.addMessage(null, facesMessage);
        } 
        catch (Exception ex) 
        {
            FacesMessage facesMessage = new FacesMessage("Erro ao Excluir.");
            context.addMessage(null, facesMessage);
        }
        return null;
    }

    public String editar()
    {
       this.endereco = this.cliente.getEnderecoEntrega();
        return "/cadastro/cliente";
    }

    public Cliente getCliente() 
    {
        return cliente;
    }

    public void setCliente(Cliente cliente) 
    {
        this.cliente = cliente;
    }

    public List<Cliente> getClientes() throws Exception 
    {
        if(this.clientes == null)
        {
            IClienteRN clienteRN        = new ClienteRN();
            this.clientes               = clienteRN.listar();
        }
        return clientes;
    }

    public void setClientes(List<Cliente> clientes) 
    {
        this.clientes = clientes;
    }

    public List<Pais> getPaises() throws Exception 
    {
        if(this.paises == null)
        {
            IPaisRN paisRN          = new PaisRN();
            this.paises             = paisRN.listar();            
        }
        return paises;
    }

    public void setPaises(List<Pais> paises) 
    {
        this.paises = paises;
    }

    public void mudarUF(ValueChangeEvent event) throws Exception
    {
        Object o = event.getNewValue();
        pesquisaUF(o);
    }

    public List<UF> getUfs() 
    {
        return ufs;
    }

    public void setUfs(List<UF> ufs) 
    {
        this.ufs = ufs;
    }

    public void pesquisaUF(Object objeto) throws Exception 
    {          
        IUFRN ufRN                  = new UFRN();
        IPaisRN paisRN = new PaisRN();
        Pais paisBuca               = paisRN.buscaPorID((Long)objeto);
        this.ufs                    = new ArrayList();  
        this.setUfs(ufRN.listar(paisBuca));  
    }  

    public Endereco getEndereco()
    {
        return endereco;
    }

    public void setEndereco(Endereco endereco) 
    {
        this.endereco = endereco;
    }

    public Pais getPais() 
    {
        return pais;
    }

    public void setPais(Pais pais) 
    {
        this.pais = pais;
    }

    public UF getUf() 
    {
        return uf;
    }

    public void setUf(UF uf) 
    {
        this.uf = uf;
    }
}
